
package com.derbysoft.synxisadapter.commons.dto.synxis;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.datatype.XMLGregorianCalendar;


/**
 * <p>Java class for Customer complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="Customer">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="PersonName" type="{http://www.opentravel.org/OTA/2003/05}PersonName" minOccurs="0"/>
 *         &lt;element name="Telephone" type="{http://www.opentravel.org/OTA/2003/05}TelephoneInfo" minOccurs="0"/>
 *         &lt;element name="Email" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="Address" type="{http://www.opentravel.org/OTA/2003/05}AddressInfo" minOccurs="0"/>
 *         &lt;element name="PaymentForm" type="{http://www.opentravel.org/OTA/2003/05}PaymentForm" minOccurs="0"/>
 *         &lt;element name="CustLoyalty" type="{http://www.opentravel.org/OTA/2003/05}CustLoyalty" minOccurs="0"/>
 *         &lt;element name="TPA_Extensions" type="{http://www.opentravel.org/OTA/2003/05}TPA_Extensions" minOccurs="0"/>
 *         &lt;element name="RelatedTraveler" type="{http://www.opentravel.org/OTA/2003/05}ArrayOfRelatedTraveler" minOccurs="0"/>
 *         &lt;element name="ContactPerson" type="{http://www.opentravel.org/OTA/2003/05}ContactPerson" minOccurs="0"/>
 *       &lt;/sequence>
 *       &lt;attribute name="BirthDate" use="required" type="{http://www.w3.org/2001/XMLSchema}date" />
 *       &lt;attribute name="Gender">
 *         &lt;simpleType>
 *           &lt;list itemType="{http://www.w3.org/2001/XMLSchema}string" />
 *         &lt;/simpleType>
 *       &lt;/attribute>
 *       &lt;attribute name="CustomerValue" type="{http://www.w3.org/2001/XMLSchema}string" />
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Customer", propOrder = {
    "personName",
    "telephone",
    "email",
    "address",
    "paymentForm",
    "custLoyalty",
    "tpaExtensions",
    "relatedTraveler",
    "contactPerson"
})
public class Customer {

    @XmlElement(name = "PersonName")
    protected PersonName personName;
    @XmlElement(name = "Telephone")
    protected TelephoneInfo telephone;
    @XmlElement(name = "Email")
    protected String email;
    @XmlElement(name = "Address")
    protected AddressInfo address;
    @XmlElement(name = "PaymentForm")
    protected PaymentForm paymentForm;
    @XmlElement(name = "CustLoyalty")
    protected CustLoyalty custLoyalty;
    @XmlElement(name = "TPA_Extensions")
    protected TPAExtensions tpaExtensions;
    @XmlElement(name = "RelatedTraveler")
    protected ArrayOfRelatedTraveler relatedTraveler;
    @XmlElement(name = "ContactPerson")
    protected ContactPerson contactPerson;
    @XmlAttribute(name = "BirthDate", required = true)
    @XmlSchemaType(name = "date")
    protected XMLGregorianCalendar birthDate;
    @XmlAttribute(name = "Gender")
    protected List<String> gender;
    @XmlAttribute(name = "CustomerValue")
    protected String customerValue;

    /**
     * Gets the value of the personName property.
     * 
     * @return
     *     possible object is
     *     {@link PersonName }
     *     
     */
    public PersonName getPersonName() {
        return personName;
    }

    /**
     * Sets the value of the personName property.
     * 
     * @param value
     *     allowed object is
     *     {@link PersonName }
     *     
     */
    public void setPersonName(PersonName value) {
        this.personName = value;
    }

    /**
     * Gets the value of the telephone property.
     * 
     * @return
     *     possible object is
     *     {@link TelephoneInfo }
     *     
     */
    public TelephoneInfo getTelephone() {
        return telephone;
    }

    /**
     * Sets the value of the telephone property.
     * 
     * @param value
     *     allowed object is
     *     {@link TelephoneInfo }
     *     
     */
    public void setTelephone(TelephoneInfo value) {
        this.telephone = value;
    }

    /**
     * Gets the value of the email property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getEmail() {
        return email;
    }

    /**
     * Sets the value of the email property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setEmail(String value) {
        this.email = value;
    }

    /**
     * Gets the value of the address property.
     * 
     * @return
     *     possible object is
     *     {@link AddressInfo }
     *     
     */
    public AddressInfo getAddress() {
        return address;
    }

    /**
     * Sets the value of the address property.
     * 
     * @param value
     *     allowed object is
     *     {@link AddressInfo }
     *     
     */
    public void setAddress(AddressInfo value) {
        this.address = value;
    }

    /**
     * Gets the value of the paymentForm property.
     * 
     * @return
     *     possible object is
     *     {@link PaymentForm }
     *     
     */
    public PaymentForm getPaymentForm() {
        return paymentForm;
    }

    /**
     * Sets the value of the paymentForm property.
     * 
     * @param value
     *     allowed object is
     *     {@link PaymentForm }
     *     
     */
    public void setPaymentForm(PaymentForm value) {
        this.paymentForm = value;
    }

    /**
     * Gets the value of the custLoyalty property.
     * 
     * @return
     *     possible object is
     *     {@link CustLoyalty }
     *     
     */
    public CustLoyalty getCustLoyalty() {
        return custLoyalty;
    }

    /**
     * Sets the value of the custLoyalty property.
     * 
     * @param value
     *     allowed object is
     *     {@link CustLoyalty }
     *     
     */
    public void setCustLoyalty(CustLoyalty value) {
        this.custLoyalty = value;
    }

    /**
     * Gets the value of the tpaExtensions property.
     * 
     * @return
     *     possible object is
     *     {@link TPAExtensions }
     *     
     */
    public TPAExtensions getTPAExtensions() {
        return tpaExtensions;
    }

    /**
     * Sets the value of the tpaExtensions property.
     * 
     * @param value
     *     allowed object is
     *     {@link TPAExtensions }
     *     
     */
    public void setTPAExtensions(TPAExtensions value) {
        this.tpaExtensions = value;
    }

    /**
     * Gets the value of the relatedTraveler property.
     * 
     * @return
     *     possible object is
     *     {@link ArrayOfRelatedTraveler }
     *     
     */
    public ArrayOfRelatedTraveler getRelatedTraveler() {
        return relatedTraveler;
    }

    /**
     * Sets the value of the relatedTraveler property.
     * 
     * @param value
     *     allowed object is
     *     {@link ArrayOfRelatedTraveler }
     *     
     */
    public void setRelatedTraveler(ArrayOfRelatedTraveler value) {
        this.relatedTraveler = value;
    }

    /**
     * Gets the value of the contactPerson property.
     * 
     * @return
     *     possible object is
     *     {@link ContactPerson }
     *     
     */
    public ContactPerson getContactPerson() {
        return contactPerson;
    }

    /**
     * Sets the value of the contactPerson property.
     * 
     * @param value
     *     allowed object is
     *     {@link ContactPerson }
     *     
     */
    public void setContactPerson(ContactPerson value) {
        this.contactPerson = value;
    }

    /**
     * Gets the value of the birthDate property.
     * 
     * @return
     *     possible object is
     *     {@link XMLGregorianCalendar }
     *     
     */
    public XMLGregorianCalendar getBirthDate() {
        return birthDate;
    }

    /**
     * Sets the value of the birthDate property.
     * 
     * @param value
     *     allowed object is
     *     {@link XMLGregorianCalendar }
     *     
     */
    public void setBirthDate(XMLGregorianCalendar value) {
        this.birthDate = value;
    }

    /**
     * Gets the value of the gender property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the gender property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getGender().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link String }
     * 
     * 
     */
    public List<String> getGender() {
        if (gender == null) {
            gender = new ArrayList<String>();
        }
        return this.gender;
    }

    /**
     * Gets the value of the customerValue property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getCustomerValue() {
        return customerValue;
    }

    /**
     * Sets the value of the customerValue property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setCustomerValue(String value) {
        this.customerValue = value;
    }

}
